Use case: SPI transmit in interrupt mode

Sequence diagram

SPI transmit in interrupt mode

  @startuml
  "Application"->"SPI" : HAL_SPI_Transmit_IT(&hspi1, aTxBuffer, DATA_TO_SEND)
  "SPI" --> "Application" : HAL_OK

  "SPI IRQHandler" <- : SPI interrupt
  "SPI" <- "SPI IRQHandler" : HAL_SPI_IRQHandler(&hspi1)

  "Application" <- "SPI" : HAL_SPI_RegisterCallback(&hspi1, HAL_SPI_TX_CB_ID, USER_SPI_TxCpltCallback)
  @enduml

Code snippet

HAL1

HAL2

#define DATA_TO_SEND   256
SPI_HandleTypeDef hspi1;
uint8_t aTxBuffer[] = "*** SPI communication based on IT mode ***"

HAL_SPI_RegisterCallback(&hspi1, HAL_SPI_TX_CB_ID, USER_SPI_TxCpltCallback);

HAL_SPI_Transmit_IT(&hspi1, aTxBuffer, DATA_TO_SEND);
#define DATA_TO_SEND   256
hal_spi_handle_t hspi1;
uint8_t aTxBuffer[] = "*** SPI communication based on IT mode ***"

HAL_SPI_RegisterTxCpltCallback(&hspi1, USER_SPI_TxCpltCallback);

HAL_SPI_Transmit_IT(&hspi1, aTxBuffer, DATA_TO_SEND);

Key changes

  1. TX complete callback registration changes from HAL_SPI_RegisterCallback(..., HAL_SPI_TX_CB_ID, ...) to HAL_SPI_RegisterTxCpltCallback().

  2. HAL2 uses hal_spi_handle_t instead of SPI_HandleTypeDef.